/*!
 * Crypto-JS v1.1.0
 * http://code.google.com/p/crypto-js/
 * Copyright (c) 2009, Jeff Mott. All rights reserved.
 * http://code.google.com/p/crypto-js/wiki/License
 */
const Crypto = require('./crypto.js');

(function () {
    // Shortcut
    var util = Crypto.util;

    Crypto.HMAC = function (hasher, message, key, options) {
        // Allow arbitrary length keys
        if (key.length > hasher._blocksize * 4) {
            key = hasher(key, {
                asBytes: true
            });
        } else {
            key = util.stringToBytes(key);
        } // XOR keys with pad constants

        var okey = key;
        var ikey = key.slice(0);
        for (var i = 0; i < hasher._blocksize * 4; i++) {
            okey[i] ^= 92;
            ikey[i] ^= 54;
        }

        var hmacbytes = hasher(
            util.bytesToString(okey) +
                hasher(util.bytesToString(ikey) + message, {
                    asString: true
                }),
            {
                asBytes: true
            }
        );
        return options && options.asBytes ? hmacbytes : options && options.asString ? util.bytesToString(hmacbytes) : util.bytesToHex(hmacbytes);
    };
})();

module.exports = Crypto;
